#ifndef _MOTOR_MOTOR_APP_H_
#define _MOTOR_MOTOR_APP_H_

#include "tim.h"
#include "gpio.h"
#include "SENSOR/sensor_app.h"

/**
 ****************************************************************************************************
 * DONE 用户变量区
 ****************************************************************************************************
 */

typedef enum {
    LF = 0,
    LB,
    RF,
    RB
}WHEEL_ID;

#define MOTOR_CONTROL_MODE 1



/**
 ****************************************************************************************************
 * DONE 用户函数区
 ****************************************************************************************************
 */

/**
 * @name 电机初始化
 * @brief 开启pwm
 */
void MOTOR_Init(void);

/**
 * @name 电机控制函数
 * @brief 控制电机方向和速度
 * @param wheel_ID 电机ID，WHEEL_ID 类型
 * @param dir 电机运行方向，1为正转，0为反转
 * @param speed 设置速度值
 */
void MOTOR_SetValue(WHEEL_ID wheel_ID,uint8_t dir,uint16_t speed);

#if MOTOR_CONTROL_MODE == 0

/**
 * @name 小车控制函数
 * @brief 控制小车前进
 */
void CAR_FRONT(uint16_t speed);

/**
 * @name 小车控制函数
 * @brief 控制小车后退
 */
void CAR_BACK(uint16_t speed);

/**
 * @name 小车控制函数
 * @brief 控制小车左转
 */
void CAR_LEFT(uint16_t speed);

/**
 * @name 小车控制函数
 * @brief 控制小车原地左转
 */
void CAR_TURN_LEFT(uint16_t speed);

/**
 * @name 小车控制函数
 * @brief 控制小车右转
 */
void CAR_RIGHT(uint16_t speed);

/**
 * @name 小车控制函数
 * @brief 控制小车原地右转
 */
void CAR_TURN_RIGHT(uint16_t speed);

/**
 * @name 小车控制函数
 * @brief 控制小车停止
 */
void CAR_STOP(uint16_t speed);


#elif MOTOR_CONTROL_MODE == 1

/**
 * @name 小车控制函数
 * @brief 控制小车前进
 */
void CAR_FRONT(uint16_t speed);

/**
 * @name 小车控制函数
 * @brief 控制小车后退
 */
void CAR_BACK(uint16_t speed);

/**
 * @name 小车控制函数
 * @brief 控制小车左转
 */
void CAR_LEFT(uint16_t speed);

/**
 * @name 小车控制函数
 * @brief 控制小车原地左转
 */
void CAR_TURN_LEFT(uint16_t speed);

/**
 * @name 小车控制函数
 * @brief 控制小车右转
 */
void CAR_RIGHT(uint16_t speed);

/**
 * @name 小车控制函数
 * @brief 控制小车原地右转
 */
void CAR_TURN_RIGHT(uint16_t speed);

/**
 * @name 小车控制函数
 * @brief 控制小车停止
 */
void CAR_STOP(uint16_t speed);

#endif

/**
 * @name 循迹小车控制
 * @brief 控制循迹小车巡线
 * @param speed 速度值
 */
void Track_Car(uint16_t speed);

#endif
